import hashlib
import platform

import psutil
import wmi


def get_hardware_info():
    info = {'cpu': psutil.cpu_count(logical=False)}

    # 获取CPU信息（这里只是简单示例，可能需要进一步解析）

    # 获取磁盘信息（这里假设第一个磁盘包含序列号）
    disk_partitions = psutil.disk_partitions()
    if disk_partitions:
        # 注意：不是所有磁盘都有序列号，这里只是一个示例
        info['disk'] = disk_partitions[0].device  # 可能是UUID或其他标识符

    # Windows特有的WMI查询来获取主板序列号（如果可用）
    if platform.system() == 'Windows':
        c = wmi.WMI()
        for baseboard_id in c.Win32_BaseBoard():
            info['motherboard'] = baseboard_id.SerialNumber  # 主板序列号
            break  # 假设只有一个主板

    # 将所有信息组合成一个字符串，并生成哈希值作为硬件机器码
    hardware_id = ''.join(f'{k}:{v}' for k, v in info.items() if v)
    hash_object = hashlib.sha256(hardware_id.encode())
    hex_dig = hash_object.hexdigest()
    return hex_dig


# 获取并打印硬件机器码

while True:  # 无限循环，直到用户决定退出
    try:
        # 获取用户输入的数字
        num_times = input("请按任意键（q退出）: ")
        # 检查用户是否想退出
        if num_times.lower() == 'q':
            break  # 退出循环
            # 尝试将输入转换为整数
        else:
            print(get_hardware_info())
    except ValueError:
        # 如果输入的不是整数，打印错误消息
        print("输入不正确，请重新输入。")
